package com.srmt.document.table.model;

/**
 * 表格类型枚举
 * 
 * 定义支持的表格类型，每种类型对应不同的API和操作方式。
 * 
 * @author SRMT Development Team
 * @since 4.0.0
 */
public enum TableType {
    
    /**
     * 普通表格
     * - 使用Docx API操作
     * - blockType = 31
     * - 支持InsertTableRowRequest等API
     */
    NORMAL_TABLE("NormalTable", "普通表格", 31),
    
    /**
     * 电子表格
     * - 使用Sheets API操作
     * - blockType = 30
     * - 支持dimension_range、values等API
     */
    SHEET("Sheet", "电子表格", 30),
    
    /**
     * 多维表格
     * - 使用Bitable API操作
     * - blockType = 18
     * - 支持记录和字段操作
     */
    BITABLE("Bitable", "多维表格", 18),
    
    /**
     * 未知类型
     */
    UNKNOWN("Unknown", "未知类型", -1);
    
    private final String code;
    private final String description;
    private final int blockType;
    
    TableType(String code, String description, int blockType) {
        this.code = code;
        this.description = description;
        this.blockType = blockType;
    }
    
    /**
     * 获取类型代码
     * 
     * @return 类型代码
     */
    public String getCode() {
        return code;
    }
    
    /**
     * 获取类型描述
     * 
     * @return 类型描述
     */
    public String getDescription() {
        return description;
    }
    
    /**
     * 获取对应的blockType
     * 
     * @return blockType值
     */
    public int getBlockType() {
        return blockType;
    }
    
    /**
     * 根据blockType获取表格类型
     * 
     * @param blockType block类型值
     * @return 对应的表格类型
     */
    public static TableType fromBlockType(int blockType) {
        for (TableType type : values()) {
            if (type.blockType == blockType) {
                return type;
            }
        }
        return UNKNOWN;
    }
    
    /**
     * 根据代码获取表格类型
     * 
     * @param code 类型代码
     * @return 对应的表格类型
     */
    public static TableType fromCode(String code) {
        if (code == null) {
            return UNKNOWN;
        }
        for (TableType type : values()) {
            if (type.code.equalsIgnoreCase(code)) {
                return type;
            }
        }
        return UNKNOWN;
    }
    
    /**
     * 判断是否为普通表格
     * 
     * @return 如果是普通表格返回true
     */
    public boolean isNormalTable() {
        return this == NORMAL_TABLE;
    }
    
    /**
     * 判断是否为电子表格
     * 
     * @return 如果是电子表格返回true
     */
    public boolean isSheet() {
        return this == SHEET;
    }
    
    /**
     * 判断是否为多维表格
     * 
     * @return 如果是多维表格返回true
     */
    public boolean isBitable() {
        return this == BITABLE;
    }
    
    /**
     * 判断是否为已知类型
     * 
     * @return 如果不是UNKNOWN返回true
     */
    public boolean isKnown() {
        return this != UNKNOWN;
    }
    
    @Override
    public String toString() {
        return String.format("%s(%s, blockType=%d)", code, description, blockType);
    }
}